/*
 * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.lang.annotation;

/**
 * 抛出以指示程序试图访问注解类型的某个元素，但该元素是在注解编译（或序列化）后
 * 添加到注解类型定义中的。如果新元素具有默认值，则不会抛出此异常。
 * 此异常可以由{@linkplain java.lang.reflect.AnnotatedElement 用于反射读取注解的API}抛出。
 *
 * @author  Josh Bloch
 * @see     java.lang.reflect.AnnotatedElement
 * @since 1.5
 */
public class IncompleteAnnotationException extends RuntimeException {
    private static final long serialVersionUID = 8445097402741811912L;

    private Class<? extends Annotation> annotationType;
    private String elementName;

    /**
     * 构造IncompleteAnnotationException以指示指定注解类型中缺少命名元素。
     *
     * @param annotationType 注解类型的Class对象
     * @param elementName 缺少元素的名称
     * @throws NullPointerException 如果任一参数为{@code null}
     */
    public IncompleteAnnotationException(
            Class<? extends Annotation> annotationType,
            String elementName) {
        super(annotationType.getName() + " missing element " +
              elementName.toString());

        this.annotationType = annotationType;
        this.elementName = elementName;
    }

    /**
     * 返回具有缺少元素的注解类型的Class对象。
     *
     * @return 具有缺少元素的注解类型的Class对象
     */
    public Class<? extends Annotation> annotationType() {
        return annotationType;
    }

    /**
     * 返回缺少元素的名称。
     *
     * @return 缺少元素的名称
     */
    public String elementName() {
        return elementName;
    }
}
